
/** JXBattle Entity Type: 战斗实体类型，按照作用类型划分 */
export enum JXBtlEntityType {
	/** 环境实体：场景效果的释放者，无碰撞属性 */
	Ambient,
	/** 玩家实体: 及战斗输入的玩家和仙灵, 有碰撞属性 */
	Role,
	/** 第三方实体: 独立存在的第三方实体的释放者
	 *  1. 其必定属于某一方
	 *  2. 可能拥有碰撞属性
	 *  3. 会参与战斗，但是所有输出和输入最终会归入其他实体中。
	 *  4. 来源于其他实体
	 *  5. eg: 召唤  
	 */
	Other,
}

/** JXBattle Entity Collision Type: 战斗实体碰撞类型 */
export enum JxBtlCollisionType {
	/** 完全不受其他影响： 无血量，无属性，不被增益，减益，控制 */
	Null,
	/** 无敌： 无血量，有属性，被增益，减益，控制 */
	Unmatched,
	/** 正常的参战对象: 有血量，有属性，被增益，减益，控制 */
	Normal,
}

/** JXBattle Camp : 阵营， 攻击方/防守方 */
export enum JXBtlCamp {
	/** 攻击方 */
	Attacker,
	/** 防守方 */
	Defenser,
	/** 无阵营 */
	NoCamp,
}

/** JXBattle Skill Type: 技能类型 */
export enum JXBtlST {
	/** 全局: 释放的时候决定了后续的属性，并且不会被增益，减益，清除，禁止添加 */
	Global,
	/** 主动：每回合计算属性，会被增益，减益，清除，禁止添加 */
	Initiat,
	/** 被动：每回合计算属性，会被增益，减益，不会被清除，禁止添加*/
	Passive,
	/** 追击：每次普攻后进行判定 */
	Pursuit,
	/** 反击： 每次受击后进行判定(这里的受击应该为受击，受到普通攻击，受到技能攻击)
	 * buff产生的伤害是不会进行反击的(比如流血，灼烧，中毒等。)
	*/
	Beatback,
}

/** JXBattle Array common Index: 战斗库普通索引 */
export enum JXBtlArrIx {
	Zero,
	One,
	Two,
	Three,
	Four,
	Five,
	Six,
	Seven,
	Eight,
	Nine,
	Ten,
}


/** JXBattleSkillStateMachine ： 技能状态*/
export enum JXBtlSSM {
	/** 空闲状态 */
	Idle,
	/** 被动触发状态 */
	Passive,
	/** 准备状态 */
	Preparing,
	/** 强制准备状态,强制准备的技能不会进行其他技能判定，
	 * 非强制准备的技能在释放回合之前可以进行其他技能的判定
	**/
	forcePreparing,
}



/** JXBattleSkillRoundCondition : 施法条件A变量 */
export enum JXBtlSRC {
	/** 每回合 */
	Every,
	/** 单数 */
	Singular,
	/** 双数 */
	Even,
	/** 普工后 */
	Atked,
	/** 受击后 */
	Hited,
}

/** JXBattle Skill Aim Camp Enemy me.: 技能目标敌我*/
export enum JXBtlSAirCEM {
	/** 全场 */
	All,
	/** 我方 */
	ME,
	/** 敌方 */
	Enemy,
}

/** JXBattle Skill Air Type: 技能目标类型 */
export enum JXBtlSAirT {
	/** 任意 */
	Any = 100,
	/**所有 */
	Every = 101,
	/**兵 */
	Bing = 102,
	/**车*/
	Che = 103,
	/*马 */
	Ma = 104,
	/**炮 */
	Pao = 105,
	/**象 */
	Xiang = 106,
	/**士 */
	Shi = 107,
	/** 自己 */
	RDSelf = 108,
	/** 上一次普攻目标 */
	LastAtk = 109,
	/** 上一次立即伤害自己的敌人 */
	LastAtkMe = 110,
}

/** JXBattleSkillTargetRange: 技能目标范围 */
export enum JXBtlSAirTR {
	/** 全体 */
	Every = 100,
	/** 最低血量 */
	RDMinHpOne = 101,
	/** 最高血量 */
	RDMaxHpOne = 102,
}

/** JXBattleSkillEffectModel: 技能效果模型 */
export enum JXBtlBEM {
	//伤害:
	/**造成伤害 */
	Hurt = 100,
	// 治疗:
	/** 造成治疗 */
	AddHp = 200,
	/** 获得护盾 */
	AddProtect = 201,

	//减益	
	/** 降低属性（固定值） */
	SubPropts = 301,
	/** 降低属性（百分比） */
	SubMulPropts = 302,

	// 增益	
	/** 提升属性（固定值） */
	AddPropts = 401,
	/** 提升属性（百分比） */
	AddMulPropts = 402,
	/** 生效期间，每回合开始重新计算 */
	RoundActivePropts = 403,
	/** 增加最大生命值 */
	AddMaxHp = 404,

	// 追加
	/** 输出吸血 */
	AtkToHp = 501,
	/** 输出吸盾 */
	AtkToProtect = 502,

	// 反馈
	/** 反弹伤害 */
	HurtToAtk = 601,
	/** 受伤回血 */
	HurtToHp = 602,
	/** 受伤回盾 */
	HurtToProtect = 603,

	// 强化
	/** 二次普攻 */
	DBHit = 701,

	//控制
	/** 无法普攻 */
	BanAttack = 801,
	/** 无法使用技能 */
	BanSkill = 802,
	/** 敌我不分: 混乱 */
	Confusion = 803,
	/** 嘲讽目标 */
	Mock = 804,
	/** 无法行动 */
	BanAction = 805,

	// 禁止
	/** 禁止治疗 */
	BanAddHp = 901,
	/** 禁止增益 */
	BanBuff = 902,
	/** 禁止免疫 */
	BanIme = 903,
	/** 禁止加盾 */
	BanProtect = 904,

	//免疫	
	/** 免疫伤害 */
	ImDamage = 1001,
	/** 免疫减益 */
	ImDeBuff = 1002,
	/** 免疫控制 */
	ImDeCtrl = 1003,
	/** 禁止添加指定效果 */
	ImByBuffId = 1004,

	//清除	
	/** 清除伤害 */
	ClDamage = 1101,
	/** 清除减益 */
	ClDeBuff = 1102,
	/** 清除控制 */
	ClCtl = 1103,
	/** 清除治疗 */
	ClAddHp = 1104,
	/** 清除增益 */
	ClBuff = 1105,
	/** 清除免疫 */
	ClIm = 1106,
	/** 清除指定效果 */
	ClByBuffId = 1107,

	// 特殊
	/** 效果延长 */
	ExEffect = 1201,
	/** 效果引爆 */
	Detonated = 1202,
	/** 复活 */
	RELife = 1203,
	/** 生命锁定 */
	LockHp = 1204,

}

export enum JXBtl_Race {
	/**兵 */
	SOLDIER = 1,
	/**车 */
	VEHICLE,
	/**马 */
	HORSE,
	/**炮 */
	CANNON,
	/**相 */
	MUTUALLY,
	/**士 */
	SCHOLAR,
}

/** JXBattleSkillEffectModelType: 技能效果模型类型 */
export enum JXBtlBEMT {
	/** 照成伤害 */
	Damage = 1,
	/** 造成治疗 */
	AddHp = 2,
	/** 减益 */
	DeBuff = 3,
	/** 增益 */
	Buff = 4,
	/** 攻击追加（输出回血，输出吸盾） */
	AtkEffect = 5,
	/** 受击反馈(受击反伤，回血，回盾) */
	HurtEffect = 6,
	/** 强化(连击) */
	Strengthen = 7,
	/** 控制 */
	Ctrl = 8,
	/** 禁止 */
	Ban = 9,
	/** 免疫 */
	Ime = 10,
	/** 清除 */
	Clear = 11,
	/** 特殊（暂定为不受其他效果影响） */
	Special = 12,
	AddFp = 13
}

/** JXBattleSkillEffectRepate: 技能Buff叠加效果 */
export enum JXBtlBER {
	/** 重复无效 */
	Invalid,
	/** 效果覆盖 */
	Cover,
	/** 叠加： 2次 */
	OverlieMinNum = 2,
	/** 叠加： 7次 */
	OverlieMaxNum = 7,
	/** 叠加： 无限  */
	Forever = 8,
}

/** JXBattle Role Type: 角色类型：按照表现类型划分， */
export enum JXBtlRT {
	/**yi */
	Card,
	/** 环境 */
	Ambient,
}

/** JXBattle Air distance: 距离枚举 */
export enum JXBtlAirDis {
	/** 全场 */
	ALL,
	/** 前排 */
	Front,
	/**中排 */
	Center,
	/** 后排 */
	Back,
}

/** JXBattle Array common Index: 战斗库普通索引 */

/** JXBattle step type 单步行动类型 */
export enum JXBtlStepType {
	/** 未定义 */
	Null,
	/** buff 生效处理  */
	Buff,
	/** 主行动 */
	Main,
	/** 追击 */
	Pursuit,
	/** 反击 */
	Beatback,
	/** 连击 */
	Combo,
}

/** 技能施法条件 */
export enum JXBtlAns_PressModel {
	/** 回合轮询 */
	RoundPoll,
	/** 回合轮询准备完成 */
	PrepareEnd,
	/** 追击 */
	Pursuit,
	/** 反击 */
	Beatback,
}

/** 战斗结果： 这里的攻击方指Camp为Attacker */
export enum JXBtlAns_Result {
	/** 平局 */
	Draw,
	/** 攻击方胜利 */
	Win,
	/** 攻击方失败 */
	Lost,
}

/**攻击范围  */
export enum JXBtlMap_Spoce {
	/**单向/多项 */
	TRACK = 1,
	/**周围 */
	AROUND,
	/**扇形 */
	SECTOR,
	/**地图坐标 */
	MAP
}

/** 错误：必须初始化静态表回调 */
export const ERR_CB_UN_READY = "you must init all callback handler in static class JXBattleCb!";
export const ERR_SKILL_EFFECT = "the skill effect not have objective decision condition";


/** 事件枚举定义 */
export enum JXBattleEvt {
	/** 开始 */
	START,

	/** 角色开始行动 */
	ROLE_BEGIN,
	/** 角色行动结束 */
	ROLE_END,

	/** 角色技能进入准备回合 */
	ROLE_SKILL_PREPARE,
	/** 角色释放技能 */
	ROLE_SKILL_PRESS, //[model, 技能信息]
	/** 角色技能释放结束 */
	ROLE_SKILL_PRESS_END,
	/** 角色技能被打断 */
	ROLE_SKILL_BREAK,

	/** 角色发起普通攻击 */
	ROLE_COM_ATK,    // [伤害信息];
	ROLE_CONTRLED,   // [被控制，控制类型]
	ROLE_IMDE, // [免疫， 免疫类型],

	/** 角色受到技能攻击 */
	ROLE_SKILL_HURT, // [伤害信息]
	/** 角色受到回血 */
	ROLE_SKILL_ADDHP, // [回血信息]
	/** 角色增加最大生命值 */
	ROLE_SKILL_ADDMAXHP, // [最大生命值增加],
	/** 角色吸血 */
	ROLE_ATK_2_HP,  // [吸血信息]
	/** 角色反弹伤害 */
	ROLE_HURT_2_ATK,
	/** 角色输出转护盾 */
	ROLE_ATK_2_PROTECT,
	/** 角色受伤转血量 */
	ROLE_HURT_2_HP,
	/** 角色受伤转护盾 */
	ROLE_HURT_2_PROTECT,

	/** 角色BUFF目标锁定 */
	ROLE_ADD_BUFF, // [uuid, skillId, nBufId, execer, target]
	/** 角色BUFF准备中 */
	ROLE_PREPARE_BUFF, // [uuid, 准备回合]
	/** 角色BUFF移除 */
	ROLE_REMOVE_BUFF, //[uuid, skillid, nBuffId, execer, target]

	/** 角色死亡 */
	ROLE_DIE,
	/** 角色复活 */
	ROLE_RELIFE,

	/** BUFF状态 */
	/** 清除锁血状态 */
	CLEAR_LOCK_HP,
	/** 当前角色锁血中 */
	LOCK_HP_EFFECT,
	/** 持续时间延长 */
	LIFE_TIME_CHANGE,
	/** 效果引爆 */
	DETONATED_BUFF,

	/**对军营伤害军营*/
	HURT_BARKS,

	/** 结束战斗 */
	END_FIGHT,
}

/** JXBattle Parts */
export const JXBtlPs = {
	/** Skill Data */
	Invalid: -1,
	InvalidString: "-1",
	S: {
		/** skill condition */
		PCDT: {
			/** 判定类型 */
			Type: 0,
			/**根据血量 */
			Surplus: 1,
			/** 概率 */
			Rate: 2,
			/** 是否影响行动 */
			force: 3,
		},
		/** 技能类型优先级，优先级越高数值越小 */
		PRI: {
			/** 被动技能 */
			[JXBtlST.Passive]: 0,
			/** 全局技能 */
			[JXBtlST.Global]: 1,
			/** 主动技能 */
			[JXBtlST.Initiat]: 2,
			/** 追击技能 */
			[JXBtlST.Pursuit]: 2,
			/** 反击技能 */
			[JXBtlST.Beatback]: 2,
			Normal: 10,
		}

	},
	/** hero position information， 站位信息 */
	/** BUFF */
	B: {
		/** BUFF state flag: BUFF状态标志 */
		FLAG: {
			/** 本回合是否已经跑过该BUFF的逻辑 */
			ROUND_EFFECT: 1 << 0,
			/** 如果作为属性BUFF，用来标志该BUFF是否已经将属性缓存到对象身上了 */
			EFFECT: 1 << 1,
			/** 本回合是否可以生效 */
			ACTIVE: 1 << 2,
			/** 本回合是否跑过公式计算 */
			CALCULAT: 1 << 3,
			/** 中断检测标识 */
			BREAK: 1 << 4,
			/** 暴击标志 */
			CRIT: 1 << 27,
			/** 锁血生效标志 */
			LOCKHP_EFFECT: 1 << 29,
			/** 是否预销毁，预销毁之后BUFF不在生效，回合结束之后会被清理掉 */
			DESTROY: 1 << 30,
		},
		/** 加护盾 */
		PROTECTS: [JXBtlBEM.AddProtect, JXBtlBEM.AtkToProtect, JXBtlBEM.HurtToProtect]
	},
	/** 伤害公式类型 */
	C: {
		/**伤害 */
		WS: 1,
		/** 必中伤害 */
		BZ: 2,
		/** 穿透 */
		CT: 3,
		WS2: 4
	},
	/** team */
	T: {
		/** 阵营克制伤害系数 */
		NATURE_MUL: 0.1,

	},
	N: [0,

	],
	/** 角色 */
	R: {
		/** 属性拓张 */
		PORPTS: {
			/** 最大血量 */
			MAXHP: 50,
			/** 当前血量 */
			CURHP: 51,
			/** 护体真气 */
			PROTECT: 52,
		},
		/** 角色标志位 */
		FLAG: {
			/** 死亡标志位 */
			DIE: 1 << 1,
			/** 属性变更标志位 */
			PROPTS: 1 << 2,
			/** 锁血状态 */
			LOCKHP: 1 << 3,
			/** 次数属性计算 */
			TIMESPROPTS: 1 << 4,
		}
	},
	/** Limit 属性限制 */
	MaxPts: {

		// 额外限制
		/** 每个角色护盾不超过100%最大生命值 */
		ProtectWithMaxHp: 1,
	},

	/** 战前准备，1回合之前 */
	FirstRd: 0,
	PrepareRd: 1,
	/** 最大回合数 */
	MaxRd: 16,
	/** 伤害最大倍数(废弃) */
	MaxDamgeMul: 10,
}